Traditionally, computing devices performed tasks exclusively in response to input from users of the computing device. As computing devices, and application programs, became more powerful and complex, an increasing amount of tasks were performed by the computing devices in response, not to explicit user input, but rather to requests initiated by the execution of other computer executable instructions. Indeed, modern computing devices executing a typical operating system and suite of application programs perform a substantial number of tasks automatically and without explicit user input.
Unfortunately, not all of the tasks automatically performed by a computing device may be tasks that the user of such a computing device actually wanted performed. For example, malicious instructions, when executed, may cause the computing device to erase, change, or send elsewhere, some or all of a user's data, including data that may be very difficult for the user to reconstruct, operate without, or wish to have disseminated. To a user of such a computing device, such malicious instructions may be very obvious, but to the processes being executed on the computing device which were tasked to perform these instructions, there may be no meaningful way to distinguish between legitimate tasks and those requested by malicious instructions.
Forcing a computing device to “double-check” each instruction, or even each instruction capable of affecting the user's data, with a user prior to performing the instruction can cause the user to be bombarded with questions from the computing device, potentially as often as multiple times every second. Even if substantial filtering is applied, thereby reducing the number of times that the computing device double-checks its actions with a user prior to performing them, users can quickly grow tired of the repeated double-checks. A user's frustration can be further increased if such double-checks occur immediately upon the heels of an explicit instruction by the user requesting that the computing device perform the very action it is now double-checking. As a result, users can become immune to, or downright ignore, the information presented in such repeated double-checks, and can, as a result, simply proceed to approve every double-checked action. Of course, blanket approval, whether by the user or otherwise, negates the purpose of such double-checks in the first place.